package com.gblfy.ws.unit;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.tools.ant.taskdefs.Java;
import org.junit.Test;

import javax.mail.search.OrTerm;
import java.text.ParseException;
import java.util.*;
import java.util.stream.Collectors;

public class UnitTest {


    // Java 自带工具方法

    // List 集合拼接成以逗号分隔的字符串
    @Test
    public void listToStrJoint() {
        // 如何把list集合拼接成以逗号分隔的字符串 a,b,c
        List<String> list = Arrays.asList("a", "b", "c");
        // 第一种方法，可以用stream流
        String join = list.stream().collect(Collectors.joining(","));
        System.out.println(join); // 输出 a,b,c
    }

    @Test
    public void listToStrJoint2() {
        // 如何把list集合拼接成以逗号分隔的字符串 a,b,c
        List<String> list = Arrays.asList("a", "b", "c");
        // 第二种方法，其实String也有join方法可以实现这个功能
        String join = String.join(",", list);
        System.out.println(join); // 输出 a,b,c
    }

    //    比较两个字符串是否相等，忽略大小写
    @Test
    public void StringComparison() {
        String strA = "2";
        String strB = "2";
        if (strA.equalsIgnoreCase(strB)) {
            System.out.println("相等");
        }
    }


    //    比较两个对象是否相等
    // 当我们用 equals 比较两个对象是否相等的时候，
    // 还需要对左边的对象进行判空，不然可能会报空指针异常，我们可以用 java.util 包下 Objects 封装好的比较是否相等的方法
    @Test
    public void objComparison() {

        String strA = "2";
        String strB = "2";

        System.out.println("2个对象是否相等:" + Objects.equals(strA, strB));
    }

    //两个 List 集合取交集
    @Test
    public void twoListIntersection() {
        List<String> list1 = new ArrayList<>();
        list1.add("a");
        list1.add("b");
        list1.add("c");
        List<String> list2 = new ArrayList<>();
        list2.add("a");
        list2.add("b");
        list2.add("d");

        list1.retainAll(list2);
        System.out.println("list1  list2 交集的元素:" + list1); // 输出[a, b]
    }


    //    ------------------------------apache commons-lang3----------------------------------------------------
    //     字符串判空
    @Test
    public void strNoNull() throws ParseException {
        // Date类型转String类型
        String date = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
        System.out.println(date); // 输出 2021-05-01 01:01:01

        // String类型转Date类型
        Date date2 = DateUtils.parseDate("2021-05-01 01:01:01", "yyyy-MM-dd HH:mm:ss");

        System.out.println(date2);

        // 计算一个小时后的日期
        Date date3 = DateUtils.addHours(new Date(), 1);
        System.out.println(date3);
    }


//     首字母转成大写


    @Test
    public void SetOperations() {
        List<String> listA = new ArrayList<>();
        listA.add("a");
        listA.add("b");
        listA.add("c");

        List<String> listB = new ArrayList<>();
        listB.add("a");
        listB.add("b");
        listB.add("d");


        // 判断集合为空
        System.out.println("判断集合为空:" + CollectionUtils.isEmpty(listA));

        // 判断集合不为空
        System.out.println("判断集合不为空:" + CollectionUtils.isNotEmpty(listA));

        // 两个集合取交集
        Collection<String> collection = CollectionUtils.retainAll(listA, listB);

        // 两个集合取并集
        Collection<String> collection2 = CollectionUtils.union(listA, listB);
        for (String s : collection2) {
            System.out.println("两个集合取并集:" + s);
        }
        // 两个集合取差集
        Collection<String> collection3 = CollectionUtils.subtract(listA, listB);
        for (String s : collection3) {
            System.out.println("两个集合取差集:" + s);
        }
    }
}
